{
	"translatorID": "fc353b26-8911-4c34-9196-f6f567c93901",
	"label": "Douban",
	"creator": "不是船长<tanguangzhi@foxmail.com>,Ace Strong<acestrong@gmail.com>",
	"target": "^https?://(www|book)\\.douban\\.com/(subject|doulist|people/[a-zA-Z._]*/(do|wish|collect)|.*?status=(do|wish|collect)|group/[0-9]*?/collection|tag)",
	"minVersion": "2.0rc1",
	"maxVersion": "",
	"priority": 100,
	"inRepository": true,
	"translatorType": 4,
	"browserSupport": "gcsibv",
	"lastUpdated": "2023-01-15 04:05:21"
}

/*
   Douban Translator
   Copyright (C) 2009-2010 TAO Cheng, acestrong@gmail.com

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

// #######################
// ##### Sample URLs #####
// #######################

/*
 * The starting point for an search is the URL below.
 * In testing, I tried the following:
 *
 *   - A search listing of books
 *   - A book page
 *   - A doulist page
 *   - A do page
 *   - A wish page
 *   - A collect page
 */
// http://book.douban.com/


function detectWeb(doc, url) {
	var pattern = /subject_search|doulist|people\/[a-zA-Z._]*?\/(?:do|wish|collect)|.*?status=(?:do|wish|collect)|group\/[0-9]*?\/collection|tag/;

	if (pattern.test(url)) {
		return "multiple";
	}
	else {
		return "book";
	}
}

function detectTitles(doc, url) {
	var pattern = /\.douban\.com\/tag\//;
	if (pattern.test(url)) {
		return ZU.xpath(doc, '//div[@class="info"]/h2/a');
	} else {
		return ZU.xpath(doc, '//div[@class="title"]/a');
	}
}

function doWeb(doc, url) {
	var articles = [];
	let r = /douban.com\/url\//;
	if (detectWeb(doc, url) == "multiple") {
		// also searches but they don't work as test cases in Scaffold
		// e.g. https://book.douban.com/subject_search?search_text=Murakami&cat=1001
		var items = {};
		// var titles = ZU.xpath(doc, '//div[@class="title"]/a');
		var titles = detectTitles(doc, url);
		var title;
		for (let i = 0; i < titles.length; i++) {
			title = titles[i];
			// Zotero.debug({ href: title.href, title: title.textContent });
			if (r.test(title.href)) { // Ignore links
				continue;
			}
			items[title.href] = title.textContent;
		}
		Zotero.selectItems(items, function (items) {
			if (!items) {
				return;
			}
			for (var i in items) {
				articles.push(i);
			}

			//list
			// Z.debug(articles)
			ZU.processDocuments(articles, scrapeAndParse);
		});
	}
	else {
		//book页
		parseBookPage(doc, url)
	}
}

function trimTags(text) {
	return text.replace(/(<.*?>)/g, "");
}

// #############################
// ##### Scraper functions #####
// #############################
function scrapeAndParse(doc, url) {
	
	ZU.doGet(url, function (page) {
		let bookDom = new DOMParser().parseFromString(page, 'text/html');
		parseBookPage(bookDom, url);
	});
}

/**
 * 解析 book 页面
 */
function parseBookPage(doc, url){
	let page = doc.body.innerHTML
	
	var pattern, extra;
	var info = {}	//保存解析出的额外信息

	// 类型 & URL
	var newItem = new Zotero.Item("book");
	newItem.url = url;

	//处理 id="info" 的 div 包含各种基本信息
	parseBookInfoBlock(doc, newItem, info)
	// Z.debug(info)

	// 标题
	pattern = /<h1>([\s\S]*?)<\/h1>/;
	if (pattern.test(page)) {
		var title = pattern.exec(page)[1];
		title = ZU.trim(trimTags(title))
		
		// 判断下副标题与标题一样否,避免重复
		newItem.title = title;
		if((title !== info.subTitle) & (info.subTitle.length > 0)){ 
			newItem.title = title + " - " + info.subTitle;
		}
		// 短标题
		newItem.shortTitle = title
	}
	
	// 评分
	let dbScore = ZU.xpathText(doc, '//*[@id="interest_sectl"]/div[1]/div[2]/strong')
	dbScoreNum = Number(dbScore.trim())
	if(dbScoreNum){
		dbScore = Math.round(dbScoreNum) + "⭐"
		newItem.tags.push(dbScore);
	}
	
	// 评价人数
	let commentNum = ZU.xpathText(doc, '//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/span/a/span')

	// 目录
	let catalogueList = ZU.xpath(doc, "//div[@class='indent' and contains(@id, 'dir_') and contains(@id, 'full')]")
	let catalogue = ""
	if(catalogueList.length>0){
		catalogue = catalogueList[0].innerHTML.replace(/· · · · · ·.*?\n/g,"")
		catalogue = "<h1>#摘录-《"+title+"》目录</h1>\n" + catalogue
		newItem.notes.push({note:catalogue})
	}
			
	//补全0
	function completeDate(value) {
		return value < 10 ? "0"+value:value;
	}

	// 标签
	var tags = ZU.xpath(doc, '//div[@id="db-tags-section"]/div[@class="indent"]/span/a[contains(@class, "tag") ]');
	for (let i in tags) {
		newItem.tags.push(tags[i].text);
	}
	
	// 作者简介
	let authorInfoList = ZU.xpath(doc, "//span[text()='作者简介']/parent::h2/following-sibling::div//div[@class='intro']")
	// 这里会获取平级的元素,当有多个时(有展开全部按钮)取最后一个
	let authorInfo = ""
	let authorInfotwo = ""
	if(authorInfoList.length>0){
		authorInfo = authorInfoList[authorInfoList.length-1].innerHTML
		// 正则提取<p>标签里面的元素,并添加换行
		authorInfo = authorInfo.match(/<[a-zA-Z]+.*?>([\s\S]*?)<\/[a-zA-Z]+.*?>/g)
		for(i=0;i<authorInfo.length;i++){
			authorInfo[i] = authorInfo[i].match(/<[a-zA-Z]+.*?>([\s\S]*?)<\/[a-zA-Z]+.*?>/g)
			authorInfotwo = authorInfotwo+RegExp.$1+"\n"
		}
		newItem.notes.push({note:"作者简介:"+"\n"+authorInfotwo+"\n"})
	}

	// 内容简介
	// 获取展开全部按钮里面的内容
	let contentInfoList = ZU.xpath(doc, "//span[text()='内容简介']/parent::h2/following-sibling::div[@id='link-report']//div[@class='intro']")
	let contentInfo = ""
	let contentInfoTwo = ""
	if(contentInfoList.length>0){
		contentInfo = contentInfoList[contentInfoList.length-1].innerHTML
		contentInfo = contentInfo.match(/<[a-zA-Z]+.*?>([\s\S]*?)<\/[a-zA-Z]+.*?>/g)
		for(i=0;i<contentInfo.length;i++){
		contentInfo[i] = contentInfo[i].match(/<[a-zA-Z]+.*?>([\s\S]*?)<\/[a-zA-Z]+.*?>/g)
		contentInfoTwo = contentInfoTwo+RegExp.$1+"\n"
		}
		newItem.abstractNote = "内容简介:"+"\n"+contentInfoTwo
	}

	// 其他
	extra = "评价人数：" + commentNum+"；"
	// extra += "分："+ dbScore + "；"
	if(info.originalTitle){ // 当没有原名时,使用空字符
		extra += "原作名：《" + info.originalTitle + "》；"
	}
	//TODO::优化容错
	extra = extra.replace(/( - )?undefined/g,"").replace("null","0")
	//价格
	let price = ''
	// Z.debug(info.priceUnit)
	if('priceUnit' in info){
		if(info.priceUnit==="" || info.priceUnit.includes("CNY")){
			price = info.priceNum + " 元";
		} else {
			price = info.priceUnit + info.priceNum;
		}
		extra += "价：" + price + ';';
	}
	newItem.extra = extra
	

	newItem.complete();
}

/**
 * 处理 id="info" 的 div，包含主要信息
 */
function parseBookInfoBlock(doc, newItem, info){
	var infoBlock = ZU.xpath(doc, '//div[@id="info"]')[0].innerHTML
	infoBlock = infoBlock.replace(/\n/g, "").replace(/\s{2,}/g," ");
	
	// TODO::优化 parse 
	// Z.debug(infoBlock.replace(/<br\/?>/g,"\n").split('\n'))
	page = infoBlock

	// 作者
	page = page.replace(/\n/g, "");
	page = page.replace(/&nbsp;/g,"")
	// Z.debug(page)
	// 豆瓣里作者一栏及其不规范,这里使用多正则匹配更多情况,提高兼容性
	let regexp = new RegExp() // 这里要把类型定义为RegExp,否则下面赋值后test(page)会失败
	let regexp2 = new RegExp()
	let regexp3 = new RegExp()
	regexp = /<span>\s*<span[^>]*?>\s*作者<\/span>:(.*?)<\/span>/;
	regexp2 = /<span class="pl">作者:<\/span>\s*?<a href="https:\/\/book\.douban\.com\/author\/\d+\/">\s*?\S*?\s*?\S*?<\/a>\s*?<br>/
	regexp3 = /<span class="pl">作者:<\/span>\s*?<a href="https:\/\/book\.douban\.com\/author\/\d+\/">\s*?\S*?\s*?\S*?<\/a>\s+\//
	if (regexp2.test(page)) { 
		regexp = regexp2
	} else if(regexp3.test(page)){
		regexp = regexp3
	}
	
	if (regexp.test(page)) { 
		var authorNames = trimTags(regexp.exec(page)[0]);
		pattern = /(\[.*?\]|\(.*?\)|（.*?）)/g;
		authorNames = authorNames.replace(pattern, "").split("/");
		// 国家
		let country = RegExp.$1
		country = country.replace("美国","美")
		country = country.match(/[一-龥]+/g)
		if(country===null){
			country = [" "]
		}

		// Zotero.debug(authorNames);
		let firstNameList = [] // 作者名列表
		let lastNameList = [] // 作者姓列表
		info.creators = []
		for (let i = 0; i < authorNames.length; i++) {
			let useComma = true;
			pattern = /[A-Za-z]/;
			if (pattern.test(authorNames[i])) {
			// 外文名
				pattern = /,/;
				if (!pattern.test(authorNames[i])) {
					useComma = false;
				}
			}
			// 实现欧美作者姓与名分开展示
			let patt1 = new RegExp("·.+\.+")
			let authorNameTemp = ""
			let ming = ""
			let xing = ""
			
			authorNames[i] = authorNames[i].replace(/作者:?(&nbsp;)?\s+/g, "")
			if(authorNames[i].indexOf(".")!= -1){ // 名字中带.的   如:斯蒂芬·D.埃平格
				authorNameTemp = authorNames[i].trim().split(".")
				xing = authorNameTemp.pop() // 取数组最后一个值作为名
				ming = authorNameTemp.join("·") // 姓氏
			} else {
				authorNames[i] =authorNames[i].replace(/•/g,"·") // 替换中文•分隔符为英文·
				authorNameTemp = authorNames[i].trim().split("·")
				xing = authorNameTemp.pop()
				ming = authorNameTemp.join("·")
			}
			xing = xing.trim()
			ming = ming.trim()
			if(country[i]){
				country = country[i].replace(/<\/a>/g,"")
			}

			info.creators.push({
				firstName: ming,
				lastName: xing,
				country: country
			})
		
			firstNameList.push(ming)
			// if(country!=" "){
			// 	country = "["+country+"]"
			// 	firstNameList.push(country+ming)
			// }else{
				
			// }
			
			lastNameList.push(xing)
			
			newItem.creators.push({firstName:firstNameList[i],lastName:lastNameList[i], creatorType:"author", fieldMode:true});
			// newItem.creators.push(Zotero.Utilities.cleanAuthor(
			// 	Zotero.Utilities.trim(authorNames[i]),
			// 	"author", useComma));
		}
	}

	// 译者
	pattern = /<span>\s*<span [^>]*?>\s*译者<\/span>:(.*?)<\/span>/;
	if (pattern.test(page)) {
		var translatorNames = trimTags(pattern.exec(page)[1]);
		pattern = /(\[.*?\])/g;
		translatorNames = translatorNames.replace(pattern, "").split("/");
		//		Zotero.debug(translatorNames);
		for (let i = 0; i < translatorNames.length; i++) {
			let useComma = true;
			pattern = /[A-Za-z]/;
			if (pattern.test(translatorNames[i])) {
			// 外文名
				useComma = false;
			}
			newItem.creators.push(ZU.cleanAuthor(
				ZU.trim(translatorNames[i]),
				"translator", useComma));
		}
	}

	// 副标题
	info.subTitle = ''
	pattern = /<span [^>]*?>副标题:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		info.subTitle = pattern.exec(page)[1].trim()
	}

	// ISBN
	pattern = /<span [^>]*?>ISBN:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		var isbn = pattern.exec(page)[1];
		newItem.ISBN = ZU.trim(isbn);
		// Zotero.debug("isbn: "+isbn);
	}

	// 页数
	pattern = /<span [^>]*?>页数:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		var numPages = pattern.exec(page)[1];
		newItem.numPages = ZU.trim(numPages);
		// Zotero.debug("numPages: "+numPages);
	}

	// 出版社
	// Zotero.debug("page: "+page);
	pattern = /<span [^>]*?>出版社:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		var publisher = pattern.exec(page)[1];
		newItem.publisher = ZU.trim(trimTags(publisher));
		//Zotero.debug("publisher: "+publisher);
	}

	// 出版年
	pattern = /<span [^>]*?>出版年:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		var date = pattern.exec(page)[1];
		newItem.date = ZU.trim(date);
		// Zotero.debug("date: "+date);
	}

	// 定价
	pattern = /<span [^>]*?>定价:(.*?)<\/span>(.*?)<br\/?>/;
	var price;
	if (pattern.test(page)) {
		var price = pattern.exec(page)[2];
		// price = "60"
		let prefix = price.match(/^((?!(\d+\.?\d*)).)*/g)[0] // 正则匹配前缀,如USD,CAD
		price = price.match(/(\d+\.?\d*)/g)[0]
		
		// 小数点后2为保持
		let numPrice = Number(price) 
		numPrice = numPrice.toFixed(2)
		
		info.priceNum = numPrice
		info.priceUnit = prefix.trim()
	}

	// 原作名
	info.originalTitle = ""
	pattern = /<span [^>]*?>原作名:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		info.originalTitle = pattern.exec(page)[1].trim()
	}

	// 丛书
	pattern = /<span [^>]*?>丛书:<\/span>(.*?)<br\/?>/;
	if (pattern.test(page)) {
		var series = trimTags(pattern.exec(page)[0]);
		series = series.split("ISBN")[0].replace("丛书:", "");
		newItem.series = ZU.trim(series);
		// Zotero.debug("series: "+series);
	}

	// return newItem
}



/** BEGIN TEST CASES **/
var testCases = [
	{
		"type": "web",
		"url": "https://book.douban.com/subject/1355643/",
		"items": [
			{
				"itemType": "book",
				"title": "Norwegian Wood",
				"creators": [
					{
						"firstName": "Haruki",
						"lastName": "Murakami",
						"creatorType": "author"
					},
					{
						"firstName": "Jay",
						"lastName": "Rubin",
						"creatorType": "translator"
					}
				],
				"date": "2003",
				"ISBN": "9780099448822",
				"abstractNote": "When he hears her favourite Beatles song, Toru Watanabe recalls his first love Naoko, the girlfriend of his best friend Kizuki. Immediately he is transported back almost twenty years to his student days in Tokyo, adrift in a world of uneasy friendships, casual sex, passion, loss and desire - to a time when an impetuous young woman called Midori marches into his life and he has ..., (展开全部)",
				"libraryCatalog": "Douban",
				"numPages": "389",
				"publisher": "Vintage",
				"url": "https://book.douban.com/subject/1355643/",
				"attachments": [],
				"tags": [],
				"notes": [
					"notes"
				],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "https://book.douban.com/subject/19952930/",
		"items": [
			{
				"itemType": "book",
				"title": "股票大作手操盘术 - 融合时间和价格的利弗莫尔准则",
				"creators": [
					{
						"firstName": "杰西",
						"lastName": "利弗莫尔",
						"creatorType": "author"
					},
					{
						"lastName": "丁圣元",
						"creatorType": "translator"
					}
				],
				"date": "2012-10",
				"ISBN": "9787115292360",
				"abstractNote": "内容简介:\n本书由华尔街传奇股票操盘手杰西·利弗莫尔亲笔所著，系统介绍了他自己独创的基于时间与价格两大要素的股市交易法则，配有他具体操盘的详细记录。此外，译者还结合当下股市的交易模式，将利弗莫尔时代的纸带记录数据转化为了现代股市交易图表，使利弗莫尔的交易思想更加易于被理解和掌握。\n本书适合对股票投资和技术分析感兴趣的读者参考阅读。",
				"libraryCatalog": "Douban",
				"numPages": "156",
				"publisher": "人民邮电出版社",
				"url": "https://book.douban.com/subject/19952930/",
				"attachments": [],
				"notes": [
					{
						"note": "<h1>#摘录-《股票大作手操盘术》目录</h1>\n\n        第 一章　投机，是一项挑战　1<br>\n        第 二章　凭规则抉择交易时机，该等则等、该出则出　17<br>\n        第三章　追随领头羊　27<br>\n        第四章　到手的钱财　35<br>\n        第五章　关键点　43<br>\n        第六章　百万美元的大错　55<br>\n        第七章　300万美元的盈利　65<br>\n        第八章　利弗莫尔市场分析法　75<br>\n        第九章　利弗莫尔操盘规则　85<br>\n        第十章　利弗莫尔交易图表手稿和释义　107<br>\n        附录　2003年版译者前言　153<br>\n     "
					},
					{
						"note": "作者简介:\n杰西•利弗莫尔（Jesse Livermore）\n20世纪初华尔街上最具传奇色彩的操盘手。他曾几度破产，又几度东山再起，在1929年的大萧条中因为做空而使个人资产达到1亿美元，成为当时美国最富有的人之一。不过仅仅4年之后，他再度破产。1939年，利弗莫尔终于决定与同行们分享自己的秘诀，写作并出版了《How to Trade In Stocks》。1940年11月，利弗莫尔在一家酒店的卫生间里饮弹自杀。\n\n"
					}
				],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "https://book.douban.com/subject/35099952/",
		"items": [
			{
				"itemType": "book",
				"title": "与天为敌：一部人类风险探索史（典藏版）",
				"creators": [
					{
						"firstName": "彼得·L",
						"lastName": "伯恩斯坦",
						"creatorType": "author",
						"fieldMode": true
					},
					{
						"lastName": "吴翌",
						"creatorType": "translator"
					},
					{
						"lastName": "童伟华",
						"creatorType": "translator"
					}
				],
				"date": "2020-6",
				"ISBN": "9787111654131",
				"abstractNote": "内容简介:\n在这部独特的著作中，彼得·伯恩斯坦探讨了风险管理在人类社会中的地位，认为驾驭风险是将现代社会与古代社会区分开来的核心理念之一，讲述了人类发展出强大风险管理工具的历程——将非数字的变成数字的，将不可量化的变成量化的，将不能建模的建成模型，以各种理论与玄学对抗风险的飘忽不定。这些工具将人类从巫婆神汉的呓语中解放出来，直到今天还为我们所用。\n现在，风险管理在非常广阔的领域里指引我们做出决策，从管理公共卫生到企业经营，从战争博弈到家庭事务规划，从金融投资到星际探索。人类好赌的天性得以转化为经济增长、生活提高和科技发展的能量。\n作者从古希腊、古罗马时代，以及文艺复兴时代一直讲述到现在，精妙地将复杂的理论诠释成风格清新、引人入胜的故事，描述了哲学家、数学家、科学家、思想家、商人、学者等是如何努力让未来服务于现在的。\n风险与其说是一种命运，不如说是一种选择，它取决于我们选择的自由程度。\n一路走来，人类祖先的所有创见让我们的生活变得更好，使未来具有更大的“可管理性”。对于未来，我们仍然敬畏，但不再惧怕。恶海行舟，大船破浪。",
				"libraryCatalog": "Douban",
				"numPages": "376",
				"publisher": "机械工业出版社 入库时间：2020年6月",
				"url": "https://book.douban.com/subject/35099952/",
				"attachments": [],
				"notes": [
					{
						"note": "<h1>#摘录-《与天为敌：一部人类风险探索史（典藏版）》目录</h1>\n\n        推荐序　管理风险就是管理未来<br>\n        译者序<br>\n        致谢<br>\n        引言 /  1<br>\n        远古～1200年<br>\n        发端<br>\n        第1章  希腊人的风气和骰子的作用 /  10<br>\n        第2章  从简单数字说起 /  22<br>\n        1200～1700年<br>\n        1000个事实<br>\n        第3章  文艺复兴时期的赌徒们 /  38<br>\n        第4章  法国人接力 /  56<br>\n        第5章  杰出人士的伟大理念 /  72<br>\n        1700～1900年<br>\n        四处度量<br>\n        第6章  考量人性 /  96<br>\n        第7章  寻找确实可靠性 /  113<br>\n        第8章  非理性世界的至高法则 /  133<br>\n        第9章  头脑古怪的人 /  150<br>\n        第10章  豆荚与危险 /  171<br>\n        第11章  幸福的构成 /  186<br>\n        1900～1960年<br>\n        模糊之云与对精确的要求<br>\n        第12章  对人类无知的度量 /  194<br>\n        第13章  卓尔不群的理念 /  213<br>\n        第14章  除了卡路里以外什么都算计的人 /  232<br>\n        第15章  匿名股票经纪人的奇异案例 /  251<br>\n        置信程度<br>\n        对不确定性的探究<br>\n        第16章  不变性的失效 /  274<br>\n        第17章  理论警察 /  292<br>\n        第18章  单边下注的奇妙机制 /  316<br>\n        第19章  等待野性发作 /  345<br>\n     "
					},
					{
						"note": "作者简介:\n彼得·L·伯恩斯坦，美国著名金融史学家，彼得·伯恩斯坦公司创始人及总裁，该公司为全球范围内的机构投资者提供咨询服务，他每月发布两期资本市场及实体经济分析报告——《经济与投资组合策略》，其读者包括管理合计超过1万亿美元资产的基金经理和投资者。伯恩斯坦先生是《投资组合管理期刊》的创办者，经常在专业及大众媒体上发表文章，出版过多部经济学与金融学著作，包括畅销书《与天为敌》《投资新革命》等。\n\n"
					}
				],
				"seeAlso": [],
				"tags": [
					{
						"tag": "8⭐"
					}
				],
				"extra": "评价人数：88；价：89.00 元;"
			}
		]
	},
	{
		"type": "web",
		"url": "https://book.douban.com/subject/26971306/",
		"items": [
			{
				"itemType": "book",
				"title": "股市稳赚",
				"creators": [
					{
						"firstName": "乔尔",
						"lastName": "格林布拉特",
						"creatorType": "author"
					},
					{
						"lastName": "李佳",
						"creatorType": "translator"
					},
					{
						"lastName": "卢晓晖",
						"creatorType": "translator"
					}
				],
				"date": "2016-2",
				"ISBN": "9787508639635",
				"abstractNote": "内容简介:\nTwo years in MBA school won't teach you how to double the market's return. Two hours with The Little Book That Beats the Market will.\nIn The Little Book， Joel Greenblatt， Founder and Managing Partner at Gotham Capital (with average annualized returns of 40% for over 20 years)， does more than simply set out the basic principles for successful stock market investing. He provides a \"magic formula\" that is easy to use and makes buying good companies at bargain prices automatic. Though the formula has been extensively tested and is a breakthrough in the academic and professional world， Greenblatt explains it using 6th grade math， plain language and humor. You'll learn how to use this low risk method to beat the market and professional managers by a wide margin. You'll also learn how to view the stock market， why success eludes almost all individual and professional investors， and why the formula will continue to work even after everyone \"knows\" it.\n--This text refers to an out of print or unavailable edition of this title.\nShow more\nShow less",
				"libraryCatalog": "Douban",
				"numPages": "224",
				"publisher": "中信出版社",
				"url": "https://book.douban.com/subject/26971306/",
				"attachments": [],
				"notes": [
					{
						"note": "<h1>#摘录-《股市稳赚》目录</h1>\n\n        序言<br>\n        修订版导<br>\n        导言<br>\n        第一章一堂投资启蒙课<br>\n        第二章最基本的四种投资渠道<br>\n        第三章股票究竟是怎么回事<br>\n        第四章价格、价值和安全边际<br>\n        第五章股票收益率与资本收益率<br>\n        第六章你要做的就是选择质优价低的股票<br>\n        第七章神奇公式<br>\n        第八章神奇公式并不是时刻有效<br>\n        第九章优质公司优质在哪儿<br>\n        第十章市场总会那么情绪化吗<br>\n        第十一章大多数人没有能力独立选择个股<br>\n        第十二章股票市场里没有牙仙<br>\n        第十三章赚钱之后<br>\n        第十四章应用指导<br>\n        2010版后记<br>\n        附录<br>\n     "
					},
					{
						"note": "作者简介:\n乔尔·格林布拉特，哥伦比亚大学商学院客座教授、投资者俱乐部网站（ValueInvestorsClub.com）合作发起人等数职，现为Gotham资本公司创始人和合伙经理人，自1985年该公司成立以来，其年均回报率高达40%。格林布拉特拥有理学学士学位，并获得沃顿商学院工商管理硕士学位，著有《你也能成为股市天才》。\n\n"
					}
				],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "https://book.douban.com/subject/33423395/",
		"items": [
			{
				"itemType": "book",
				"title": "财报就像一本故事书（最新增订版）",
				"creators": [
					{
						"firstName": "",
						"lastName": "刘顺仁",
						"creatorType": "author",
						"fieldMode":true
					}
				],
				"date": "2018-8",
				"ISBN": "9787203107743",
				"abstractNote": "内容简介:\n循序渐进三大制胜秘籍，带你深入浅出玩透财务报表！ *心法篇——内功练心法，破解通往财富之路的关键密码，用财报修炼五大神功。 *招式篇——外功练招式，轻松掌握损益表、综合损益表、资产负债表、所有者权益变动表、现金流量表五大财务报表。 *进阶篇——活学活用财务报表，轻松解析企业竞争力，避开商业阴谋，随时保护自己。",
				"libraryCatalog": "Douban",
				"numPages": "320",
				"publisher": "山西人民出版社",
				"url": "https://book.douban.com/subject/33423395/",
				"attachments": [],
				"notes": [
					{
						"note": "<h1>#摘录-《财报就像一本故事书（最新增订版）》目录</h1>\n\n        001推荐序/听刘老师说财报故事——从战情仪表板到宇宙重力波 009缘起/把“课责”练成绝招 013前言/淬炼说故事的力量 Part 1心法篇 003**章/财报是淬炼商业智谋的起点 020第二章/用财报修炼五大神功 038第三章/飞行中，要相信你的仪表板 Part 2招式篇 057第四章/获利、获利、获利——损益表的原理与应用 089第五章/穿透企业的市场重力波——综合损益表的原理与应用 096第六章/学习威尼斯商人的智慧与严谨——资产负债表的原理与应用 125第七章/是谁动了我的奶酪——所有者权益（或股东权益）变动表的原理与应用 151第八章/别只顾加速，却忘了油箱没油——现金流量表的原理与应用 Part 3进阶篇 183第九章/踏在磐石而不是流沙上——谈资产质量与竞争力 202第十章/经营管理，而不是盈余管理——谈盈余品质与竞争力 220第十一章/历久弥新的股东（所有者）权益报酬率——谈经营质量与竞争力 240第十二章/*重要的是，要随时保护你自己——如何避开商业阴谋 260第十三章/用《孙子兵法》看财报 Part 4财报外一章 283第十四章/用财报向法人说故事 290谢词/下一次，换“我们”说故事<br>\n     "
					},
					{
						"note": "作者简介:\n刘顺仁，台湾大学经济学学士、美国匹兹堡大学会计学博士，曾任美国马里兰州立大学助理教授，现为台湾大学管理学院会计学系主任，并担任台湾大学“竞争力与创新研究中心”主任。主要研究兴趣为策略性财报分析、策略性成本管理、绩效评估制度对经理人行为及企业绩效的影响等，并长期关注企业、产业的竞争力分析。\n\n"
					}
				],
				"tags": [
					{
						"tag": "8⭐"
					}
        		],
        		"extra": "评价人数：281；价：58.00 元;",
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "https://book.douban.com/subject/1064275/",
		"items": [
			{
				"itemType": "book",
				"title": "老人与海",
				"creators": [
					{
						"firstName": "",
						"lastName": "海明威",
						"creatorType": "author"
					},
					{
						"lastName": "吴劳",
						"creatorType": "translator"
					}
				],
				"date": "1999-10",
				"ISBN": "9787532723447",
				"abstractNote": "内容简介:\n本书讲述了一个渔夫的故事。古巴老渔夫圣地亚哥在连续八十四天没捕到鱼的情况下，终于独自钓上了一条大马林鱼，但这鱼实在大，把他的小船在海上拖了三天才筋疲力尽，被他杀死了绑在小船的一边。在归程中，他再遭到一条鲨鱼的袭击，最后回港时只剩鱼头鱼尾和一条脊骨。而在老圣地亚哥出海的日子里，他的忘年好友一直在海边忠诚地等待，满怀信心地迎接着他的归来。",
				"libraryCatalog": "Douban",
				"numPages": "104",
				"publisher": "上海译文出版社",
				"url": "https://book.douban.com/subject/1064275/",
				"attachments": [],
				"notes": [],
				"seeAlso": []
			}
		]
	},
	{
		"type": "web",
		"url": "https://book.douban.com/subject/26901159/",
		"items": [
			{
				"itemType": "book",
				"title": "交易圣经",
				"creators": [
					{
						"firstName": "［澳］布伦特",
						"lastName": "奔富",
						"creatorType": "author",
						"fieldMode": true
					},
					{
						"lastName": "郑磊",
						"creatorType": "translator"
					}
				],
				"date": "2016-9",
				"ISBN": "9787111546689",
				"abstractNote": "内容简介:\n技术与复杂的预测方法可以帮你了解市场的趋势，但却很难让你盈利。\n真正能让交易者在市场残酷的搏杀中胜出的是强大的交易心理，以及清醒的认识风险与细致的资金管理筹划，这一切构成了完整的交易系统。\n本书为所有志在从事交易的读者提供了一份详细的交易系统构建解决方案。作者归纳了系统交易制胜的六大原则：\n1. 做好心理准备，明确自己的交易底线在哪里。\n2. 用明确的交易理念启蒙自己的交易思想。\n3. 寻找真正适合自己的正确交易风格。\n4. 聪明地选择适合开展交易的投资市场。\n5. 理顺交易的三大支柱：资金管理、交易方法、\n交易心理，在此基础上构架自己的交易系统。\n6. 用合适的交易程序规范自己的交易。\n在六大系统交易制胜原则之外，作者还总结了交易新手在头三年会遇到的种种问题。同时，本书还在最后列举了十余位成功的交易员，希望通过他们的交易系统启迪广大读者。",
				"libraryCatalog": "Douban",
				"numPages": "444",
				"publisher": "机械工业出版社",
				"url": "https://book.douban.com/subject/26901159/",
				"attachments": [],
				"notes": [
					{
						"note": "<h1>#摘录-《交易圣经》目录</h1>\n\n        推荐序<br>\n        译者序<br>\n        前　言<br>\n        引言　1<br>\n        成功交易通用原则　7<br>\n        第 1 章 　交易的真相　9<br>\n        为什么90%的交易者亏损　12<br>\n        心理因素　13<br>\n        第一年常见错误　14<br>\n        第二年常见错误　16<br>\n        第三年常见错误　23<br>\n        如何跻身10%成功者的行列　27<br>\n        第 2 章 　交易过程　31<br>\n        第 3 章 　通用原则一：准备　36<br>\n        最大逆境　38<br>\n        情绪指向　40<br>\n        失利　43<br>\n        随机市场　43<br>\n        输得起才会赢　44<br>\n        风险管理　45<br>\n        交易伙伴　45<br>\n        财务边界　47<br>\n        第 4 章 　通用原则二：启蒙　49<br>\n        避免爆仓风险　51<br>\n        信奉交易“圣杯”　59<br>\n        追求简单　68<br>\n        涉足众人不敢去的地方　70<br>\n        验证　71<br>\n        第 5 章 　通用原则三：交易风格　77<br>\n        交易模式　78<br>\n        交易长短期限　79<br>\n        选择交易风格　80<br>\n        长线趋势交易　85<br>\n        平均收益-平均损失比率　87<br>\n        短线摆动交易　89<br>\n        长线趋势交易VS短线摆动交易　92<br>\n        第 6 章 　通用原则四：市场　95<br>\n        良好操作风险管理的特性　97<br>\n        良好交易的特性　99<br>\n        第 7 章 　通用原则五：三大支柱　103<br>\n        资金管理　105<br>\n        方法　105<br>\n        心理因素　106<br>\n        第 8 章 　资金管理　107<br>\n        马丁格尔资金管理模式　109<br>\n        反马丁格尔资金管理模式　110<br>\n        关键概念　111<br>\n        历史回顾　112<br>\n        反马丁格尔资金管理策略　118<br>\n        无资金管理策略的单个合同的外汇交易法　119<br>\n        固定风险资金管理策略的外汇交易法　121<br>\n        固定资金管理策略的外汇交易法　124<br>\n        固定比率资金管理策略的外汇交易法　129<br>\n        是要1800万美元还是150万美元，这是个问题　135<br>\n        固定单位资金管理策略的外汇交易法　138<br>\n        威廉斯固定风险资金管理策略的外汇交易法　145<br>\n        固定百分比资金管理策略的外汇交易法　150<br>\n        固定波幅资金管理策略的外汇交易法　155<br>\n        选择哪种资金管理策略　161<br>\n        交易权益动量　178<br>\n        系统终止点　179<br>\n        第 9 章 　方法　185<br>\n        方法论　186<br>\n        随机应变型交易法和机械型交易法　187<br>\n        建立方法论　188<br>\n        趋势交易　205<br>\n        并不是所有指标都是糟糕的　239<br>\n        难道市场不变化　242<br>\n        多种方法　243<br>\n        制胜方法的基本属性　244<br>\n        一个制胜之道的例证：海龟交易法则　250<br>\n        客观趋势工具的例子　252<br>\n        斐波那契数列：事实还是谎言　255<br>\n        自我安慰的交易者　264<br>\n        第10章 　心理因素　273<br>\n        共识　275<br>\n        管理希望　278<br>\n        管理贪婪　279<br>\n        管理恐惧　280<br>\n        市场困难重重　288<br>\n        第 11 章 　通用原则六：交易　291<br>\n        现在开始交易　293<br>\n        交易：发出指令　294<br>\n        第 12 章 　大师卓见　310<br>\n        他山之石　311<br>\n        市场交易大师　312<br>\n        拉蒙·巴罗斯　316<br>\n        马克D.库克　323<br>\n        各式各样的交易员　329<br>\n        迈克尔·库克　330<br>\n        凯文·戴维　334<br>\n        汤姆·德马克　337<br>\n        李·格特斯　345<br>\n        戴若·顾比　349<br>\n        理查德·迈尔基　354<br>\n        杰夫·摩根　359<br>\n        格雷格·莫里斯　367<br>\n        尼克·瑞吉　370<br>\n        布莱恩·谢德　375<br>\n        安德里亚·昂格尔　380<br>\n        拉里·威廉斯　383<br>\n        王达　392<br>\n        金玉良言　396<br>\n        第 13 章 　结束语　399<br>\n        致谢　404<br>\n        附录A 　爆仓风险模拟计算器：变量和模型　406<br>\n        附录B 　爆仓风险模拟计算器：代码　411<br>\n        附录C 　爆仓风险模拟计算器：运行结果　418<br>\n     "
					},
					{
						"note": "作者简介:\n布伦特·奔富，经验丰富的期货交易大师，注册投资咨询顾问，交易思想的普及者，交易书籍作者。\n他于1983年在美国银行(Bank of America)以机构自营商的身份开始了他自己作为全职交易员的职业生涯。时至今日，他已纵横驰骋寰球交易市场30余年，是期货、大宗商品、外汇、贵金属与全球各类金融指数的交易专家。布伦特精通机械/算法交易，在当今科技的支持下，他全天候24小时交易的产品包括但不限于：指数期货（恒生指数、标普500、富时指数、德国DAX指数、日经225指数、台湾加权指数、E-Mini Nasdaq和E-Mini SP500等）、外汇期货（美元、欧元、日元、瑞郎、澳元、加元等）、大宗商品（原油、黄金、小麦、大豆等）以及期权等等流通性极高的、波动幅度较大的金融工具。\n作为一名受欢迎的国际投资教育工作者，他常年往返于包括澳大利亚、新西兰、马来西亚、越南、泰国、印度及中国等国家，所到之处深受期货、外汇交易者的拥戴。拥有金融商业硕士学位的布伦特·奔富还是特许期货投资顾问。\n\n"
					}
				],
				"seeAlso": [],
				"tags": [
					{
						"tag": "8⭐"
					}
				],
				"extra": "评价人数：118；价：65.00 元;"
			}
		]
	},
	{
		"type": "web",
		"url": "https://www.douban.com/doulist/120664512/",
		"items": "multiple"
	},
	{
		"type": "web",
		"url": "https://book.douban.com/tag/认知心理学?type=S",
		"items": "multiple"
	},
	{
		"type": "web",
		"url": "https://search.douban.com/book/subject_search?search_text=Classics%3A+An+Investor%27s+Anthology&cat=1001",
		"items": "multiple"
	}
]
/** END TEST CASES **/
